# -*- coding: utf-8 -*-
# 操作内容：
# @Software: PyCharm
# @File: client.py
# @Author: 一碗好酒（张智）
# @E-mail: 1473658931@qq.com, 
# @Time: 7月 08, 2021
# ---
# 封装请求对象

import requests
import jsonpath

from common.encry_decry import md5
from common.logger import GetLogger


class RequestsClient:
    # access_token = None
    # 这个类作为所有单接口的基类出现，因此在该类中定义好接口需要的各个字段。
    def __init__(self):
        #创建logger日志对象
        self.logger = GetLogger.get_logger()
        self.session = requests.session()
        self.host = None
        self.url = None
        self.method = None
        self.headers = None
        self.params = None
        self.data = None
        self.json = None
        self.files = None
        self.resp = None

    # 因为请求又不定长的参数，因此采用可变参数进行传递。
    # 如果init定义了一些属性，那么子类可以进行继承+重新进行传递，如果init里面没有定义属性
    # 可以通过send（）里面的kwargs这个不定参数进行传递。
    def send(self, **kwargs):  #关键信息不能拼错
        '''
        发起请求
        传入不定长字典
        **kwargs解包 ->关键字传递
        :return:
        '''

        if kwargs.get('url') == None:
            kwargs['url'] = self.url
        if kwargs.get('method') == None:
            kwargs['method'] = self.method
        if kwargs.get('headers') == None:
            kwargs['headers'] = self.headers
        if kwargs.get('params') == None:
            kwargs['params'] = self.params
        if kwargs.get('data') == None:
            kwargs['data'] = self.data
        if kwargs.get('json') == None:
            kwargs['json'] = self.json
        if kwargs.get('files') == None:
            kwargs['files'] = self.files
        # 日志，查看请求的各个值
        for item in kwargs.items():
            self.logger.info('接口信息{}'.format(item))


        #提示信息
        self.logger.info('准备开始发起请求')
        self.resp = self.session.request(**kwargs)
        self.logger.info('接口响应状态码：{}'.format(self.resp.status_code))
        self.logger.info('接口响应内容：{}'.format(self.resp.text))

        return self.resp


    def extract_expr(self,jsonpath_express,index=0):
        '''

        :param index: 代表想要获取目标结果中的第几个数据
        index =0 默认获取第一个数据
        index =1,2.。。正常的索引值的获取
        index =-1 想要获取所有的数据，返回一个列表
        :return:
        '''

        if self.resp != None and self.resp!='':
            if index>=0:
                extract_data = jsonpath.jsonpath(self.resp.json(), jsonpath_express)[index]
                self.logger.info('接口提取响应内容是：{}'.format(extract_data))
                return extract_data
            elif index ==-1:
                extract_data = jsonpath.jsonpath(self.resp.json(), jsonpath_express)
                self.logger.info('接口提取响应内容是：{}'.format(extract_data))
                return extract_data

if __name__ == '__main__':
    # 卖家的登录
    url = 'http://www.mtxshop.com:7003/seller/login'
    # 请求参数构造为字典
    params = {
        'username': 'shamoseller',
        'password': md5('123456'),
        # 验证码固定
        'captcha': '1512',
        'uuid': '11yu'
    }
    kwagrs = {
        'url': url,
        'method': 'get',
        'params': params

    }
    client = RequestsClient()
    resp = client.send(**kwagrs)  # 加上** 进行解包
    print(f'响应状态码{resp.status_code}')
    print(f'响应状态码{resp.text}')
